Release 3.2 Copyright ã1993 by NeXT Computer, Inc. All Rights Reserved.

3.2 Release Notes: 
Printing

This file contains release notes for Release 3 of the NEXTSTEP printing software. Notes specific to Releases 3.0, 3.1, and 3.2 are listed separately, starting with Release 3.2. The notes for Release 3.0 are listed last.

Notes Specific to Release 3.2

New Features

The following features have been added to the printing software since Release 3.1.

·	Centronics parallel printing has been improved. Some lesser problems are now reported as printing alertsÐfor example, out of paper, printer offline, and so on. Deleting a print request that is currently printing happens more quicklyÐfewer additional pages are printed.

·	The dot matrix printer support has been removed from the NEXTSTEP for Intel processors version of the software. This now requires a printing license. There is a separate NeXT product available to support these printers. For information, contact NeXT's Order Management at 1-800-848-NeXT.

·	A new user defaultÐNXMustPrintCollatedÐwas added to the Application Kit. This default causes applications to imbed multiple-copy information from the Print panel in PostScript print jobs. This greatly speeds up multiple-copy printing on some printers. This default does have some limitations. See the Application Kit Release Notes in /NextLibrary/Documentation/NextDev/AppKit.rtf.

·	The Admin directory in printer entries on the local host may contain properties that have more control over the spooling process. This property was added:

	-	ResponseTimeout: An alert can be displayed that the printer has "not responded", meaning that it has hasn't accepted characters for a specified time period. This property sets that time period in seconds. To turn off the timeout completely, set the value to 0. The default value is 300 (5 minutes) for PostScript printers, and 30 for nonPostScript printers. Only parallel communications supports this property.

Known Problems

This new bug has appeared since Release 3.1.

·	Grays appear much lighter on PostScript Level 2 printers than on PostScript Level 1 printers. According to Adobe, these grays match the display more closely and so are a more correct rendering of the requested gray level. This doesn't happen on the NeXT 400 dpi Laser Printer, even though it's a Level 2 printer.

	A workaround involves forcing the rendering of NEXTSTEP-generated print jobs to follow the device-dependent or Level 1 model. This can be done at the application level using the NXUseCalibratedColor default settingÐsee the Application Kit Release Notes for information. It can also be done on a printer-by-printer basis: Find the local printer entry in NetInfoManager, open the Admin subdirectory, and add an "NXUseCalibratedColor" property with the value "NO". This works only on printers that use the standard NeXT drivers with PrintManager.
	
	Note that this workaround forces output to look different on different printersÐit turns off the device-independent color model.

Notes Specific to Release 3.1

This section contains information about the following topics:
·	The print spoolers, printer entries, lpd and npd
·	PrintManager

Print Spoolers, Printer Entries, lpd and npd

The following sections describe new features and bug fixes associated with this release of the print spoolers, npd and lpd.

New Features

The following new features have been added to the print spoolers, printer entries, npd and lpd, since Release 3.0:

·	The Admin subdirectory in the printer entries on the local host may contain properties that have more control over the spooling process. Some new properties have been added since 3.0. This is the complete list:

	-	CoverSheet: This controls whether a cover sheet identifying the job and user is printed with each job. It should be YES if a cover sheet is desired, or NO if not.

	-	CoverSheetPath: There is a default cover sheet file: /usr/lib/NextPrinter/Server/DefaultPrintCover.ps. A custom cover sheet file may be specified using this property. The software substitutes the following strings in the cover sheet file for the appropriate strings for a print job: $$Date$$, $$Host$$, $$Printer$$, $$Title$$, and $$User$$. The DefaultPrintCover.ps file was created using the Draw demo application.

	-	InitFiles: A list of files that will be downloaded before a job is executed for that printer. This could be used for putting labels on each page, setting up a printer-specific PostScript environment, and so on. Each value for the property should be a separate file, and the files are downloaded in value order.

	-	LogFile: Path for logging output of PostScript jobs. Note that this is not for spooling messages, just job output. Default: /usr/adm/lpd-errs.

	-	NoOutputLogging: If YES, do not log job PostScript output.

	-	ReversePageOrder: By default, the printed page order is governed by the NXPrinter object for the printer. If the PPD information isn't present, normal (face-down) order is assumed. This property can be used to change this behavior for a particular printer. It may have the following values:

			0: Base order on PPD information.
			1: Use reverse order. Always print the final job page first.
			2: Use normal order. Always print the first job page first.

	-	TextPassThrough: If YES, do not convert a nonPostScript job to PostScript; just pass the job through to the printer. This is useful when jobs are generated for the printer from nonNEXTSTEP sources, such as SoftPC nonPostScript printer drivers.

	-	WaitAfterPage: The time to wait after a page is printed, in seconds. This could be used to let pages dry before printing new ones, for example.
	
·	If a printer entry contains a "_nxfinalform" property, printer-specific PostScript (including any needed fonts) is bound into spooling jobs on the local (spooling) host. This is useful for printers on foreign hosts, or for printers on NEXTSTEP machines that are not using the standard NEXTSTEP spooling software.

Bugs Fixed in Release 3.1

These bugs have been fixed in Release 3.1:

Reference	22021 

Problem	Documents print as black rectangles

Description	Pages sometimes print with unexpected black rectangles. This bug occurs in both printing and faxing. 

Reference 	24834 

Problem	If the active app has no windows open, clicking OK to a Printing alert activates another application. 

Description	Because the active application has no windows open (and therefore isn't in line to be activated), the printing alert panel for example ., "No paper in printer") activates the next app in line to be activated. In Release 3.1, printing alert panels simply go away when OK is clicked without activating another application. 

Reference 	27368 

Problem	Audio printing alerts use machine's preferred language rather than user's. 

Description	If an audio alert was given for a user in one preferred language, then the user changes preferred language, the new preference is not noticed. In Release 3.1, the new default is noted and the alert is enunciated in the correct language. 

Reference 	27545 

Problem	Problems printing various paper sizes 

Description	Envelopes, B5, A4 and other paper sizes would only print properly in manual mode on the NeXT Laser Printer.

Reference 	28721 

Problem	lpd can only print once 

Description	Whenever another system prints to a NeXT print server via lpd (e.g., a DOS box or another workstation), the job prints. However, the NeXT printer then goes offline until a print request is received from another NeXT system. 

Reference 	29470 

Problem	A3 image is truncated on NeXT Color Printer 

Description	If you choose the paper format A3, the output is clipped on the right side at papersize letter. 

Reference 	29845 

Problem	LaserWriter won't print - "cassettetraycode" PS problem 

Description	Printing to an Apple Personal LaserWriter NT generates a postscript error on the cassettetraycode operator 

Reference 	30037 

Problem	Quark PostScript prints mirrored 

Description	Some Quark files print incorrectly. The output image may look too big or too small, or it may be printed backwards, as in a mirror.

Reference 	30117 

Problem	Process PostScript comments at host 

Description	Device-specific PostScript for setting resolution, page size, etc. is included in a job at print time based on information contained in a PPD file. This inclusion is normally handled by the NeXT machine to which the printer is directly connected (the print server). 

	In Release 3.1, if you put a property called "_finalform" in the printer entry, the PostScript inclusion process is handled by the machine submitting the print job for spooling. 

Reference 	30325 

Problem	Can't print jobs that start with CTRL-D 

Description	Some apps on DOS (including maybe Windows?) produce PostScript jobs that start with CTRL-D, then have the %! line. These jobs are printed as text, not PostScript. The printing software assumes that if the first two characters in a job are not "%!", it's not PostScript (technically correct). For Release 3.1, the case of documents starting with CTRL-D is detected and printed correctly. 

Reference 	30762 

Problem	No imagesetter custom paper size

Description	The spooling software doesn't support custom paper size comment on Level 1 devices.  

Reference 	31485 

Problem	System 7 Mac files are page-reversed

Description	The spooling software reversed the page order in Mac system 7 files even though the PostScript comments indicate that this shouldn't be done. This causes incorrect fonts to be printed. 

PrintManager

The following sections describe new features and bug fixes associated with this release of the PrintManager application.

New Features

The following new features have been added to the PrintManager application since Release 3.0:

·	When the user is not allowed to access a NetInfo domain, a panel is displayed which allows input of a user and password that has access to the domain. This access is saved in a small cache, so repeated panels are not necessary unless printer entries are being created and/pr modified in a number of domains.

·	There are 43 new Printer Types. All printer type files have been updated.

·	Four serial baud rates have been added: 14400, 28800, 43200, 57600.

Bugs Fixed in Release 3.1

These bugs have been fixed in Release 3.1:

Reference 	30808 

Problem	Printer names containing non-ASCII chars create problems

Description	Some non-ASCII characters cause problems in the names of printers and fax modems. This can result in incorrect behavior when the printer/modem entry is modified in PrintManager. Spooled jobs may be lost, for instance, or old spooling directories may not be deleted.

Notes Specific to Release 3.0

This section contains information about the following topics:
·	The print spoolers, printer entries, lpd and npd
·	PrintManager

Print Spoolers, Printer Entries, lpd and npd

The following sections describe new features, changes, and known problems associated with this release of the print spoolers, npd and lpd.

New Features

The following new features have been added to the print spoolers, npd and lpd, since Release 2.0.

·	PrintManager supports a new spooling filter (see below). Printer entries should be updated to use the new filter. The NeXT Laser Printer entry will, in general, be updated automatically. However, if it is public and you upgrade a system off the associated network, you should go into PrintManager, and make the entry public again.

	Also, all other printer entries must be manually updated. Enter PrintManager, select the appropriate printer, and click the Modify button. Make sure the information shown in the panle is correct, particularly the printer type. The printer type is used by the system software in this release, so it should be as accurate as possible. Use Unknown if you don't find your printer in the types list. Then hit the OK button when you have verified that the information is correct.

·	There is a new spooling filter: /usr/lib/NextPrinter/Server/prserver. This lpd filter is used to print to most printers: the NeXT Laser Printer, NeXT Color Printer, PostScript printers, dot matrix printers, etc. It replaces the TranScript spooling system for serial PostScript printers, which is no longer used. (The TranScript spooling software has been shipped. The appropriate lpd/printcap entry must be constructed manually; PrintManager does not support TranScript spooling.)

	The new spooling filter interprets most PostScript comments, so it supports automatic font downloading and printer "feature" inclusion, like manual feed and paper tray switching. It uses the NXPrinter object to obtain PPD information about the printer. (PPD files are explained in a little more detail below). Note that since the filter runs as root, the PPD information for the printer must be available to root on the printer's host.
	
	For standalone PostScript printers, fonts are included at the beginning of the PostScript stream if they are needed. Only fonts listed in the NXPrinter object are assumed to be resident in the printer. The print job declares which fonts are needed use the %%DocumentFonts: or %%DocumentNeededFonts: PostScript comment in the header and/or trailer of the print job.
	
	For printers that use the PostScript imaging engine on the NeXT platform, the font mechanism is the same as in release 2.0. Fonts are not included in the job by the spooling software because it is assumed the WindowServer can find and use the fonts based on the user that submitted the job.
	
	This spooling filter uses the NXPrinter object to determine the appropriate page stacking order for a printer. It will reorder the job pages if possible to satisfy this order. If no PPD information is available, it will assume normal (facedown) order. This can be overridden in the printcap entry Ð see below.

·	There are several new printers supported: the NeXT Color Printer, the Epson 510, and the IBM ProPrinter 24P. These last two are dot matrix printers. Many other dot matrix printers have emulation modes that support one or both of these.

	All of these printers use the same "print shortcut" that the NeXT Laser Printer uses: the job starts printing when the first page of the job is spooled, rather than waiting for the entire job to be delivered to the spooling system. Note that the job must be held up if the page order is different from the printer stacking order.

·	The printing system now uses the NXPrinter object to obtain information about specific printer types, like whether they do manual feed, how many paper trays they have, whether output pages stack in reverse order, etc. The NXPrinter object gets most of this information from PPD files. PPD stands for PostScript Printer Description, and is a format defined by Adobe Systems, Incorporated. Our software depends on the latest format: PPD version 4.0. PPD information is necessary to fully support a printer. Even the dot matrix printers have PPD files.

	Normally, the PPD information is found using the "ty" property in the printer entry: the printer type. To obtain a PPD file name, blanks are changed to underscore and slash (/) is changed to percent (%), then .ppd is added. The following directories are searched to find the file: /NextLibrary/PrinterTypes, ~/Library/PrinterTypes, /HostLibrary/PrinterTypes, and /LocalLibrary/PrinterTypes.

	It is sometimes necessary to modify the PPD information for a printer. The stock PPD files that are used for printer types should not be modified. Instead, additions should be put into a separate file that "includes" the standard PPD information using the *Include directive. The "ppdname" property of the printer entry is used to specify this custom PPD file. The name is converted in the same way as the "ty" property: blanks and slashed are converted and .ppd is appended. The custom PPD file is searched in the Custom subdirectory of the directories for the stmdard PPD files: /NextLibrary/PrinterTypes/Custom, etc. Note that many printers could share the custom PPD file if appropriate. Also this file, just like any other PPD file, must be available to a process running as "root" on the printing host.

·	lpr,lpd and npd conspire to support deferred printing (that is print this job at a given time in the future), a feature which is currently used only for faxing. The implementation is such that it only works for jobs which go through lpd for spooling and printing (as opposed to being handled by npd).

	A new postscript conforming comment is inserted in the job setup section:
	%%NXDeferredUntil:YYYYMMDDhhmm. npd detects this comment and if present, sends it to lpr via the -D argument. npd has also been modified to report the deferred time as a negative number in its queue reporting messages to PrintManager.
	
	A new argument -DYYYYMMDDhhmm is supported by lpr. When lpr sees this argument it writes the following entry in the control file:
	
	4deferred_untilYYYYMMDDhhmm
	
	Note that this overloads the troff font #4 line in the control file. This was chosen to insure compatibility with other lpd's which might participate in forwarding the job to its final (NeXT) destination.
	
	Lpd has been modified to use the above control file entry to defer printing of a job until the given time arrives. Deferred jobs remain in the queue in their order of posting, they are just ignored until there time comes.
	
·	A new version of TranScript (3.0) is included with this release. Look at the TranScript man pages for more detailed information.

	There are two new commands that process PostScript input:
	pslpr: Does page reversal, landscape printing, paper size selection, etc.
	psnup: Images multiple pages on one sheet of paper, select paper size, etc.
	
	enscript now allows the user to select page size, set tabs, and specify printer features. It also uses the NXPaperType default to decide page size.

	The spooling portion of TranScript is not being used in this release, and is not supported by PrintManager.
	
·	The printcap entries created by PrintManager on the local host now have subdirectories. nidump cannot be used to store a local printcap entry; NetInfoManager must be used to modify these entries. nidump/niload still works fine for importing and exported remote entries (entries for printers that are not on the local host).

	Also, there is a new property "nxformat" that has a float value. PrintManager creates its entries with this property set to 3.0. An entry that does not contain this property cannot be modified by PrintManager. This can be used to prevent custom printcap entries from being modified by PrintManager by mistake.

	The Admin subdirectory may contain properties that give some amount of control of the spooling process (see Release 3.1 notes for a complete list):

	-	ReversePageOrder: By default, the printed page order is governed by the NXPrinter object for the printer. If the PPD info is not present, normal (face-down) order is assumed. This property can be used to change this behavior. It may have the following values:
			0: Base order on PPD information.
			1: Use reverse order. Always print the final job page first.
			2: Use normal order. Always print the first job page first.

	-	InitFiles: A list of files that will be downloaded before a job is executed for that printer. This could be used for putting labels on each page, setting up a site-specific PostScript environment, etc. Each value for the property should be a separate file, and the files are downloaded in value order.

	-	CoverSheet: This controls whether a cover sheet identifying the job and user is printed with each job. It should be 1 if a cover sheet is desired, 0 if not.

	-	CoverSheetPath: There is a default cover sheet file: /usr/lib/NextPrinter/Server/DefaultPrintCover.ps. A custom cover sheet file may be specified using this property. The software substitutes the following strings in the cover sheet file for the appropriate strings for a print job: $$Date$$, $$Host$$, $$Printer$$, $$Title$$, and $$User$$. The DefaultPrintCover.ps file was created using the Draw demo application.

Changes

The following changes have been made to the printer daemons, npd and lpd, since Release 2.0.

·	Print alerts are now provided for most printing errors conditions on most printers. They are provided for PostScript printers if the printer is connected using serial or AppleTalk and the error information coming back from the printer can be deciphered (error information from PostScript printers has no standard). These alerts are now localized to the logged-on user, or to the machine's language if no user is logged-on.

·	Fax alerts are now distinguished from printer alerts by display of a different icon in the alert panel. Alerts sent to a 3.0 system from a 2.x system will still display the Printer icon, however. Unlike printer alerts (where only one alert can be displayed at a time), all fax alerts are displayed until dismissed by the user.

·	npd must be a UNIX child process of lpd. lpd starts npd up automatically on system boot. Because of this relationship, npd should not be killed and restarted manually. Rather, the system should be restarted. This is true of the parent lpd process for the same reason.

·	Accounting now works for the NeXT printers as well as PostScript printers connected through the serial port. To get accounting, the "af" property in the printer entry contains the name of the accounting file. This file must exist and must be writeable by root on the printing host. It should be truncated regularly like other log files, since it will grow without bound.

·	The spooling architecture has changed somewhat. All printcap entries created by PrintManager look basically the same. The prserver process is used to print jobs in all cases: for PosTScript printers using all the supported communication types, and for NeXT-based imaging as well. The "print shortcut" is no longer implemented by npd; npd simply calls the prserver process to print the job.

·	Some modifications have been made to the lpd system to enhance security. these should not have an effect on spooling in general. Some custom programs may be affected. The /dev/printer socket has been moved to /dev/lpd/printer, and the /dev/lpd directory allows only root access by default. Of your environment requires non-root access to the spooling system directly, you can change the access mode on /dev/lpd. This is not recommended. 

Known Problems

The following are known problems in the printer daemons, npd and lpd. They will be corrected in a future release.

·	The TranScript filters cannot find PostScript resources (fonts, for example), since NEXTSTEP uses a different resource structure. A data base to support TranScript could be built. See the TranScript man pages.

·	The spooling system cannot handle documents that have Encapsulated PostScript files imbedded in them which aren't surrounded by the appropriate %%BeginDocument:/%%EndDocument comments, especially if the EPS file has %%Page: and %%Trailer comments.  You can fix the documents by putting the appropriate comments around the imbedded EPS file, or by putting the line "%!" at the very beginning of the file.

·	If you are printing to a remote system which has a full disk, your print job will sit on your system waiting for space to be made on the remote system. The problem is that you will not get notified of this.

Future Directions

The following new features are planned for future releases of the printer daemons, npd and lpd.

·	We are pretty sure that the whole spooling architecture will be redesigned with many massive changes.

PrintManager

The following sections describe new features and bug fixes associated with this release of the PrintManager application.

New Features

The following new features have been added to PrintManager since Release 2.0.

·	More communications options are now supported. Serial baud rate and hardware handshaking can be set in PrintManager (these settings must match the setting on the printer, of course). SCSI is supported for the NeXT Color Printer. AppleTalk is supported if AppleTalk has been enabled on the printing host. Parallel communication is supported if the host has a third party parallel port and third party installation software has been updated to write the appropriate entry in NetInfo.

·	The Fax Options panel has been extensively modified to include fax receive options, necessary to support the new fax receive software that permits controlled sharing of fax across the net. The mail address field has been deleted as faxes are no longer distributed via mail.

·	Fax modems have been separated from printers. There is now a Printers window for printers, and a Fax Modems window for fax modems. Both windows may be accessed through choices in the main menu.

·	PrintManager remembers the size of the Printers and Fax Modems windows, and remembers which of these windows were showing when the user last quit. When PrintManager is first started, it opens whichever windows were open in the last session, and they are given the size and position they had in the last session.

·	NetInfo updates can take an indeterminant amount of time to propagate. This can cause errors when PrintManager is creating or modifying a public printer.  PrintManager waits a length of time after every remote NetInfo update to let the changes propagate. This time may be changed using the RemoteNetInfoSettleTime default, which defines the wait time in seconds. The normal value is 3 seconds. You might try increasing this value to get rid of errors changing remote printer information.

·	The AppleTalk Printer browser uses a fixed timeout for collecting printer names to display. This timeout is normally 30 seconds. Printers must respond within this timeout in order to be displayed. This timeout value may be adjusted using the NXAppleTalkPrintersTimeout default. You might try increasing the timeout is a zone on your AppleTalk net is very slow and printers in that zone are not appearing in the browser.

Changes

The following changes have been made to PrintManager since Release 2.0.

·	The Queue panel for fax modems has been modified to display the send time of all pending fax jobs (the send time for non-deferred faxes is displayed as ASAP).

·	The New window has been renamed Create, and the Configure window has been renamed Modify.

·	The Configure window for the "NeXT 400 dpi Level II Printer" has the type browser disabled. There is no way to change its type. Also, the NeXT 400 dpi Level II Printer entry in Printer Types is disabled in all cases, since this entry cannot be created by the user.

·	There are many new printer types in the Extended system. Some of the printer types have changed names. If you get a "Printer device information not available" message in the Print panel, use PrintManager to change the printer type to one of the recognized ones.

Known Problems

The following are known problems in PrintManager. They will be corrected in a future release.

·	You can't publish a printer to more than one domain with PrintManager. You can, however, copy the remote printer entry from one domain to another with NetInfoManager to achieve the same effect.

·	The Pause and Continue functionality of the Queue window doesn't work that well. It will only work on the local system. If you pause the queue on a remote system what that really does is pause sending of new jobs to the print server. It doesn't pause the jobs on the print server.

·	If you have a job selected in the Queue window and the queue changes, your selection stays in the same row rather than with the job you selected.

·	The Configure panel will hang when you are exporting to a machine that is powered down. The machine has to be up and running for the Configure to complete.